package com.niuke;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 35. 采样过滤
 * 傻逼逻辑题
 * https://zhuanlan.zhihu.com/p/642711406
 */
public class NiukeMoni35 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String[] row1 = scanner.nextLine().split(" ");
        String[] row2 = scanner.nextLine().split(" ");
        int m = Integer.parseInt(row1[0]); // 周期
        int t = Integer.parseInt(row1[1]); // 故障次数
        int p = Integer.parseInt(row1[2]); // 故障回复周期数

        List<List<Integer>> results = new ArrayList<>();
        List<Integer> item = new ArrayList<>();
        List<Integer> huiFu = new ArrayList<>();
        boolean isNormal = true;
        int errorCount = 0;

        for (int i = 0; i < row2.length; i++) {
            int curr = Integer.parseInt(row2[i]);
            if (i % m == 0) {
                errorCount = 0;
            }

            // 先做最内部关键的是否工具正常判断
            if (isNormal) {
                if (curr < 0 && results.size() == 0 && item.size() == 0) {
                    errorCount++;
                } else {
                    int last = curr;
                    if (results.size() > 0 && item.size() == 0) {
                        last = huiFu.get(huiFu.size() - 1);
                    } else if (item.size() > 0){
                        last = item.get(item.size() - 1);
                    }
                    if (curr < 0 || curr < last || curr - last >= 10) {
                        errorCount++;
                        item.add(last);
                    } else {
                        item.add(curr);
                    }
                }

                if (errorCount >= t) {
                    isNormal = false;
                    huiFu.clear();
                }

            } else {
                if (curr < 0 && item.size() == 0) {
                    // 开始一直小于0，直到工具报错依然小于0，让huiFu集合保持空
                } else if (item.size() == 0) {
                    // 出现大于等于0的正常值，赶紧先添加第一个正常值
                    huiFu.add(curr);
                } else {
                    int last = 0;
                    if (huiFu.size() == 0) {
                        last = item.get(item.size() - 1);
                    } else {
                        last = huiFu.get(huiFu.size() - 1);
                    }
                    if (curr >= last && curr - last < 10) {
                        huiFu.add(curr);
                    } else {
                        huiFu.clear();
                        huiFu.add(last);
                    }

                    if (huiFu.size() >= p) {
                        isNormal = true;
                        results.add(item);
                        // 恢复故障时，重新实例一个记录正常数据的集合，并且把之前的正常数据集合保存
                        // 而且新实例对象不添加当前数据
                        item = new ArrayList<>();
                    }
                }
            }

            // 在循环结束的最后，也要把item存起来
            if (i == row2.length - 1 && item.size() > 0) {
                results.add(item);
            }
        }

        for (int i = 0; i < results.size(); i++) {
            List<Integer> res = results.get(i);
            System.out.println(Arrays.toString(res.toArray()));
        }

    }

}
